package cn.iocoder.yudao.module.system.dal.mysql.college;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.college.CollegeDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.ArrayList;
import java.util.List;

/**
 * 高校基础信息 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface CollegeMapper extends BaseMapperX<CollegeDO> {

    /**
     * 根据高校名称查询高校信息
     *
     * @param collegeName 高校名称
     * @return 高校信息列表
     */
    default List<CollegeDO> selectByCollegeName(String collegeName) {
        return selectList(CollegeDO::getCollegeName, collegeName);
    }

    /**
     * 根据高校UUID查询高校信息
     *
     * @param schoolUuid 高校UUID
     * @return 高校信息
     */
    default CollegeDO selectBySchoolUuid(String schoolUuid) {
        return selectOne(CollegeDO::getSchoolUuid, schoolUuid);
    }

    /**
     * 根据数据ID查询高校信息
     *
     * @param dataId 数据ID
     * @return 高校信息
     */
    default CollegeDO selectByDataId(String dataId) {
        return selectOne(CollegeDO::getDataId, dataId);
    }

    /**
     * 根据省份查询高校信息
     *
     * @param province 省份
     * @return 高校信息列表
     */
    default List<CollegeDO> selectByProvince(String province) {
        return selectList(CollegeDO::getProvince, province);
    }

    /**
     * 根据高校类型查询高校信息
     *
     * @param collegeType 高校类型
     * @return 高校信息列表
     */
    default List<CollegeDO> selectByCollegeType(String collegeType) {
        return selectList(CollegeDO::getCollegeType, collegeType);
    }

    /**
     * 根据985/211/双一流标识查询高校信息
     *
     * @param is985 是否985
     * @param is211 是否211
     * @param isDualClass 是否双一流
     * @return 高校信息列表
     */
    default List<CollegeDO> selectBySpecialType(Boolean is985, Boolean is211, Boolean isDualClass) {
        LambdaQueryWrapperX<CollegeDO> wrapper = new LambdaQueryWrapperX<>();
        if (is985 != null) {
            wrapper.eq(CollegeDO::getIs985, is985);
        }
        if (is211 != null) {
            wrapper.eq(CollegeDO::getIs211, is211);
        }
        if (isDualClass != null) {
            wrapper.eq(CollegeDO::getIsDualClass, isDualClass);
        }
        return selectList(wrapper);
    }

    /**
     * 根据高校名称模糊查询高校信息
     *
     * @param collegeName 高校名称关键字
     * @return 高校信息列表
     */
    default List<CollegeDO> selectByCollegeNameLike(String collegeName) {
        return selectList(new LambdaQueryWrapperX<CollegeDO>()
                .like(CollegeDO::getCollegeName, collegeName));
    }

    /**
     * 根据省份和城市查询高校信息
     *
     * @param province 省份
     * @param city 城市
     * @return 高校信息列表
     */
    default List<CollegeDO> selectByProvinceAndCity(String province, String city) {
        LambdaQueryWrapperX<CollegeDO> wrapper = new LambdaQueryWrapperX<>();
        wrapper.eq(CollegeDO::getProvince, province);
        if (city != null && !city.isEmpty()) {
            wrapper.eq(CollegeDO::getCity, city);
        }
        return selectList(wrapper);
    }

    /**
     * 批量根据schoolUuid查询高校信息
     *
     * @param schoolUuids 高校UUID列表
     * @return 高校信息列表
     */
    default List<CollegeDO> selectBySchoolUuids(List<String> schoolUuids) {
        if (schoolUuids == null || schoolUuids.isEmpty()) {
            return new ArrayList<>();
        }
        return selectList(new LambdaQueryWrapperX<CollegeDO>()
                .in(CollegeDO::getSchoolUuid, schoolUuids));
    }

    /**
     * 查询所有有效的高校信息（排除已删除的）
     *
     * @return 高校信息列表
     */
    default List<CollegeDO> selectAllValid() {
        return selectList(new LambdaQueryWrapperX<CollegeDO>()
                .eq(CollegeDO::getIsDeleted, false)
                .orderByAsc(CollegeDO::getRanking));
    }

}
